﻿using System;
using System.Collections.Generic;
using System.ServiceModel;
using System.ServiceModel.Channels;
using System.Xml;
using System.IdentityModel.Tokens;
using System.ServiceModel.Security.Tokens;
using System.Xml.Linq;

namespace SecurityTokenServiceNS
{
    public sealed class RST
    {
		private XNamespace _namespaceUri;
		private IDictionary<string, Object> _extensions;
        private string _context;
        private string _requestType;
        private EndpointAddress _appliesTo;
        private string _tokenType;
        private int _keySize;
        private string _keyType;
        private string _encryptWith;
        private string _signWith;
        private string _canonicalizationAlgorithm;
        private string _encryptionAlgorithm;
        private string _computedKeyAlgorithm;
        private SecurityToken _entropy;
        private IList<ClaimTypeRequirement> _claims;
        private string _lifetime;
        private string _authenticationType;
        private string _signatureAlgorithm;
        private string _encryption;
        private string _proofEncryption;
		private SecurityToken _useKey;

        private Constants.WSTrust.ProofType _proofType;

        public RST(XNamespace namespaceUri)
        {
			_namespaceUri = namespaceUri;
            _extensions = new Dictionary<string, Object>();
        }

        #region Properties
		public XNamespace NamespaceUri
		{
			get { return _namespaceUri; }
			set { _namespaceUri = value; }
		}
        public IDictionary<string, Object> Extensions
        {
            get { return _extensions; }
            set { _extensions = value; }
        }
        public string Context
        {
            get { return _context; }
            set { _context = value; }
        }
        public string RequestType
        {
            get { return _requestType; }
            set { _requestType = value; }
        }
        public EndpointAddress AppliesTo
        {
            get { return _appliesTo; }
            set { _appliesTo = value; }
        }
        public string TokenType
        {
            get { return _tokenType; }
            set { _tokenType = value; }
        }
        public int KeySize
        {
            get { return _keySize; }
            set { _keySize = value; }
        }
        public string KeyType
        {
            get { return _keyType; }
            set { _keyType = value; }
        }
        public string EncryptWith
        {
            get { return _encryptWith; }
            set { _encryptWith = value; }
        }
        public string SignWith
        {
            get { return _signWith; }
            set { _signWith = value; }
        }
        public string CanonicalizationAlgorithm
        {
            get { return _canonicalizationAlgorithm; }
            set { _canonicalizationAlgorithm = value; }
        }
        public string EncryptionAlgorithm
        {
            get { return _encryptionAlgorithm; }
            set { _encryptionAlgorithm = value; }
        }
        public string ComputedKeyAlgorithm
        {
            get { return _computedKeyAlgorithm; }
            set { _computedKeyAlgorithm = value; }
        }
        public SecurityToken Entropy
        {
            get { return _entropy; }
            set { _entropy = value; }
        }
        public IList<ClaimTypeRequirement> Claims
        {
            get { return _claims; }
            set { _claims = value; }
        }
        public string Lifetime
        {
            get { return _lifetime; }
            set { _lifetime = value; }
        }
        public string AuthenticationType
        {
            get { return _authenticationType; }
            set { _authenticationType = value; }
        }
        public string SignatureAlgorithm
        {
            get { return _signatureAlgorithm; }
            set { _signatureAlgorithm = value; }
        }
        public string Encryption
        {
            get { return _encryption; }
            set { _encryption = value; }
        }
        public string ProofEncryption
        {
            get { return _proofEncryption; }
            set { _proofEncryption = value; }
        }
		public SecurityToken UseKey
        {
            get { return _useKey; }
            set { _useKey = value; }
        }
		public Constants.WSTrust.ProofType ProofType
		{
			get { return _proofType; }
			set { _proofType = value; }
		}

        #endregion

	}
}
